- 優化新增任務輸入欄位
• 提示文字:「輸入新任務」
• 可以按加號新增任務,也可以按 Enter 鍵新增
TextField(
controller: _textController,
decoration: const InputDecoration(
hintText: '輸入新任務', // 這裡設定提示文字
),
onSubmitted: (value) { // 新增按 Enter 也能新增任務
if (value.isNotEmpty) _addTask(value);
},
)
- 任務刪除功能
• 每個任務旁邊增加紅色垃圾桶圖示
• 點擊垃圾桶即可刪除該任務
IconButton(
icon: const Icon(Icons.delete, color: Colors.red), // 垃圾桶圖示改成紅色
onPressed: () => _removeTask(index), // 刪除該任務的方法
)
- 任務完成狀態切換
• 點擊任務文字即可標記完成或取消完成
• 已完成任務文字加上刪除線
ListTile(
title: Text(
todo['task'],
style: TextStyle(
decoration: todo['done']
? TextDecoration.lineThrough
: TextDecoration.none,
),
),
onTap: () => _toggleDone(index), // 點擊切換完成狀態
)
- 任務列表 UI 調整
• 使用 ListView.builder 顯示任務列表
• 調整 ListTile 之間的間距
Expanded(
child: ListView.builder(
itemCount: _todoList.length,
itemBuilder: (context, index) {
final todo = _todoList[index];
return Padding(
padding: const EdgeInsets.symmetric(vertical: 4.0), // 每個任務之間間距
child: ListTile(
title: Text(
todo['task'],
style: TextStyle(
decoration: todo['done']
? TextDecoration.lineThrough
: TextDecoration.none,
),
),
trailing: IconButton(
icon: const Icon(Icons.delete, color: Colors.red),
onPressed: () => _removeTask(index),
),
onTap: () => _toggleDone(index),
),
);
},
),
)
- 程式結構整理
• 將新增、刪除、切換完成狀態功能封裝成方法
• 使用 setState() 確保畫面即時更新
void _addTask(String task) {
setState(() {
_todoList.add({'task': task, 'done': false});
});
_textController.clear();
}
void _toggleDone(int index) {
setState(() {
_todoList[index]['done'] = !_todoList[index]['done'];
});
}
void _removeTask(int index) {
setState(() {
_todoList.removeAt(index);
});
}